package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * listFiles(接口：Filter)    重载
 * Filter接口---专门给listFiles方法提供:过滤文件夹或者文件【指定规则】
 *accept()从每个File的文件中判断，拿到【具体逻辑】的文件夹
 * 需求: 获取 API 项目下 所有子项【文件和文件夹】，获取src文件
 *     指定规则：验证是s开头就是src
 *     //作业2:FileFilter接口按照 匿名内部类 方法 实现
 *     接口：FileFilter  ff=new FileFilter(){accept()}
 */
public class FilterAPI {
    //主方法：./  路径指定根级
    public static void main(String[] args) throws IOException {
        //1.创建File文件夹：获取当前API 文件夹 路径：./
        File file = new File("." + File.separator + "API");
        System.out.println(file.getCanonicalPath());
        //4.创建FileFilter接口对象----无法直接创建:实现类-----实现--接口【创建】
        FileFilter my=new FileFilter() {
            public boolean accept(File pathname) {
                String name=pathname.getName();
                System.out.println("过滤出现文件夹名字是:"+name);
                return name.startsWith("s");
            }
        };
        //2.获取文件夹下的所有”子项：文件夹下包括所有文件和文件夹“
        File[] subs = file.listFiles(my);
        //3.打印子项下的所有名字
        for (int i = 0; i < subs.length; i++) {//i 下标  从0开始
            System.out.println("所有文件和文件夹名：" + subs[i].getName());
        }
    }
        //单元测试: ./ 路径指定父级
   /* @Test
    public void test01() throws IOException {
        //创建File文件夹：获取当前API 文件夹 路径：./
        File file=new File("."+ File.separator);
        System.out.println(file.getCanonicalPath());
    }*/
    }
    class MyFilter implements FileFilter {
        //accept(File pathname)
        //传入参数：File pathname---获取所有需要过滤文件
        //作用：添加过滤文件，将获取所有需要过滤文件
        //       逐一过滤，【条件：规则--开发者指定】条件
        //     满足返回true，输出。条件不满足反之
        public boolean accept(File pathname) {
            //添加规则：文件或者文件夹是 s 开头 -- 过滤
            //①获取所有的文件夹名字
            String name=pathname.getName();
            //②过滤以s开头的文件夹     字符串:startWith() 返回值：boolean
            // 作用：验证字符串首字符是不是匹配字符，如果匹配true，反之不匹配
            //③打印过滤出现字符串
            System.out.println("过滤出现文件夹名字是:"+name);
            return name.startsWith("s");
        }
    }

